/*
 * 路由对象
 * 中心思想：需要路由鉴权,由于uni-app没有vue中的全局钩子函数，所以封装了Router对象。
 * 说明：应用中的路由跳转尽量使用该Router的方法，并配合config中的路由表对象进行跳转。
 *
 * 示例：this.$mRouter.push({route:this.$mRoutesConfig.main,query:{a:1}})
 *
 */
interface Router {
  callBack?: (type?: string, path?: string) => void; // 假设 callBack 是一个可选的无参回调函数
}
class Router {
  constructor() {
    this.callBack = () => {};
  }

  beforeEach(callBack) {
    if (callBack instanceof Function) this.callBack = callBack;
  }

  push(to) {
    this.callBack?.('navigateTo', to);
  }

  redirectTo(to) {
    this.callBack?.('redirectTo', to);
  }

  reLaunch(to) {
    this.callBack?.('reLaunch', to);
  }

  switchTab(to) {
    this.callBack?.('switchTab', to);
  }

  back(delta) {
    // #ifdef H5
    history.back();
    // #endif
    // #ifndef H5
    uni.navigateBack({
      delta,
    });
    // #endif
  }
}

export default new Router();
